<?php
/**
 * Created by PhpStorm.
 * User: Rm
 * Date: 2018/4/8
 * Time: 9:23
 */

namespace app\common\model;

/**
 * Class Config
 * @package app\common\model
 */
class Config
{
    public const CFG_FILE = CONFIG_PATH."web_cfg.yaml";

    # 配置格式说明
    # type: 分类（0：文字类 1：图片 2：视频 ）待补充。。。
    # name: 标题
    # value: 值
    # remarks: 备注
    # display: 是否显示（0，不显示；1，显示）

    /**
     * 判断当前时间是否在交易时间内
     * @author 王崇全
     * @date   2018/10/11 12:04
     * @return bool
     * @throws \Exception
     */
    public function checkDealTime()
    {
        $transaction_time = $this->get('transaction_time');
        $transaction_time = explode("-", $transaction_time);
        if (!isset($transaction_time[0]) || !isset($transaction_time[1])) {
            throw new \Exception("交易时间设置错误, 请联系管理员");
        }
        $startTime = strtotime(trim($transaction_time[0]));
        $endTime   = strtotime(trim($transaction_time[1]));
        if (!$transaction_time[0] || !$transaction_time[1]) {
            throw new \Exception("交易时间设置错误, 请联系管理员");
        }
        $now = strtotime(date("H:i:s"));

        return $now >= $startTime && $now <= $endTime;
    }


    /**
     * 获取单项配置
     * @author 王崇全
     * @date   2018/11/1 10:58
     * @param string|null $key
     * @return string|array
     */
    public function get(string $key = null)
    {
        $cfg = $this->read();

        return $key ? $cfg[$key]["value"] ?? null : $cfg;
    }

    /**
     * 设置单项配置
     * @author 王崇全
     * @date   2018/11/1 10:57
     * @param string $key
     * @param        $value
     * @return void
     * @throws
     */
    public function set(string $key, $value)
    : void {
        $cfg                = $this->read();
        $cfg[$key]["value"] = $value;
        $this->write($cfg);
    }


    /**
     * 读取配置
     * @author 王崇全
     * @date   2018/11/1 10:54
     * @return array 全部的配置信息
     */
    private function read()
    : array
    {
        return \Spyc::YAMLLoad(self::CFG_FILE);
    }

    /**
     * 回写配置
     * @author 王崇全
     * @date   2018/11/1 10:54
     * @param array $cfg 全部的配置信息
     * @return void
     * @throws
     */
    private function write(array $cfg)
    : void {
        $yaml =  \Spyc::YAMLDump($cfg);
        if (false === @file_put_contents(self::CFG_FILE, $yaml)) {
            throw new \Exception("配置回写失败");
        }
    }

    /**
     * 根据配置类型获取相关配置
     * @author 王海东
     * @date
     * @param int $type 配置类型 （0：文字类 1：图片 2：视频 ）
     * @return array
     */
    public function getConfigByType(int $type)
    {
        $read = $this->read();

        $data = [];
        foreach ($read as $key => $val) {
            if($val['type'] == $type) {
                $data[] = $val;
            }
        }

        return $data;
    }
}